import IFightAction from "../fight/IFightAction";
import BaseAction from "./BaseAction";
import IFightFilter from "./IFightFilter";

/*****************************
 *@file: NormalAttack
 *@author: 陈吕唐
 *@desc: 简单普通单体攻击行动策略
 *@date: 2024-02-28	17:55
 *****************************/
export default class NormalAttackAction extends BaseAction implements IFightAction {
    /****************************************************************************************************************
     *Readonly 常量
     ****************************************************************************************************************/
    /****************************************************************************************************************
     *Property 定义变量
     ****************************************************************************************************************/
    /**
     * @description: 找到敌人策略
     */
    protected _find: IFightFilter = undefined!;
    /****************************************************************************************************************
     * Lifecycle 生命周期相关方法
     ****************************************************************************************************************/
    /****************************************************************************************************************
     * Public 公有方法
     ****************************************************************************************************************/
    /**
     * 普通攻击
     * @param value 
     * @returns 
     */
    public action() {
        /**
         * 伤害来源
         */
        let source = this.fight;

        let array = source.enemy;
        let enemyArray = this.find.filter(array);

        if (!enemyArray || enemyArray.length == 0) {
            return Promise.resolve(false);
        }

        let bullet = this.createNormalBullet(source);

        for (let i = 0; i < array.length; i++) {
            const element = array[i];
            element.hurt(bullet);
        }
        return Promise.resolve(true);
    }
    /****************************************************************************************************************
     * private 私有方法
     ****************************************************************************************************************/
    /****************************************************************************************************************
     * Property Get && Set 属性的 get && set 函数
     ****************************************************************************************************************/
    protected get find(): IFightFilter {
        if (!this._find) {
            this._find = this.createDefaultFind();
        }
        return this._find;
    }

    protected set find(value: IFightFilter) {
        this._find = value;
    }
}